home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
PROGMISC
/
FORTRAN1.LZH
/
ISORT.FOR
< prev
next >
Wrap
Text File
|
1988-02-08
|
3KB
|
106 lines
SUBROUTINE ISORT ( ARRAY, NUM, INDX )
C*
C* *******************************
C* *******************************
C* ** **
C* ** ISORT **
C* ** **
C* *******************************
C* *******************************
C*
C* SUBPROGRAM :
C* SORT ARRAY - THE INPUT ARRAY IS SORTED AS WELL AS THE ARRAY
C* 'INDX'. THEREFORE, INDX CAN BE USED TO PRINT
C* ANY NUMBER OF RELATED ARRAYS.
C*
C* AUTHOR :
C* ART RAGOSTA
C* MS 207-5
C* AMES RESEARCH CENTER
C* MOFFETT FIELD, CALIF 94035
C* (415)694-5578
C*
C* PURPOSE :
C* PRODUCE A SORTED INDEX POINTER ARRAY
C*
C* METHODOLOGY :
C* SHELLSORT
C*
C* INPUT ARGUMENTS :
C* NUM - NUMBER OF ELEMENTS IN ARRAY
C* ARRAY - ARRAY TO BE SORTED
C*
C* OUTPUT ARGUMENTS :
C* INDX - INDEX ARRAY
C*
C* INTERNAL WORK AREAS :
C* TEMPA - USED DURING SWAPS
C*
C* COMMON BLOCKS :
C* NONE
C*
C* FILE REFERENCES :
C* NONE
C*
C* DATA BASE ACCESS :
C* NONE
C*
C* SUBPROGRAM REFERENCES :
C* NONE
C*
C* ERROR PROCESSING :
C* NONE
C*
C* TRANSPORTABILITY LIMITATIONS :
C* NONE
C*
C* ASSUMPTIONS AND RESTRICTIONS :
C* THE TYPE OF THE ARRAY 'ARRAY' AND THE VARIABLE 'TEMPA'
C* MUST BE SET FOR EACH TYPE OF SORT. FOR THIS PARTICULAR
C* IMPLEMENTATION, THE ARRAY IS CHARACTER WITH LENGTH <= 255.
C*
C* LANGUAGE AND COMPILER :
C* ANSI FORTRAN 77
C*
C* VERSION AND DATE :
C* VERSION I.0 MARCH 12, 1984
C*
C* CHANGE HISTORY :
C* 03/12/84 INITIAL VERSION
C*
C***********************************************************************
C*
DIMENSION ARRAY(1), INDX(1)
CHARACTER *(*) ARRAY
CHARACTER *255 TEMPA
INTEGER TEMPI
LOGICAL DONE
C
DO 10 I = 1, NUM
INDX(I) = I
10 CONTINUE
IF (NUM .LE. 1) RETURN
JUMP = NUM
20 JUMP = JUMP / 2
30 DONE = .TRUE.
NJ = NUM-JUMP
DO 40 J = 1, NJ
I = J + JUMP
IF (ARRAY(J) .GT. ARRAY(I))THEN
DONE = .FALSE.
TEMPA = ARRAY(J)
ARRAY(J) = ARRAY(I)
ARRAY(I) = TEMPA
TEMPI = INDX(J)
INDX(J) = INDX(I)
INDX(I) = TEMPI
ENDIF
40 CONTINUE
IF (.NOT. DONE) GO TO 30
IF (JUMP .GT. 1) GO TO 20
RETURN
END
C
C---END ISORT
C